本篇要分享的內容會接續這兩篇(string.Length、LEN() & DATALENGTH()),如果還沒看得可以先點進去看一下。
已知
目前想到的是使用GetByteCount()去取得位元組數量,再回來寫判斷,先讓程式端和資料庫端的基準對齊。
還是要來看看微軟文件對於這個方法的解釋
在衍生類別中覆寫時,計算編碼指定的字串字元所產生的位元組數目
這個方法的意思和T-SQL的DATALENGTH()有點類似,都是回傳位元組的數目。
說明:因為SSMS預設是用UTF-16編碼,所以在下圖有先選擇用UTF-16的編碼方式(第10行)去取得位元組數目,為了就是要讓資料庫端和程式碼端的資訊對齊。如果程式碼端沒有判斷輸入字串長度,再加上依照現有的欄位大小(nvarchar(500))寫入的話,這段越南文是可以存進資料庫,但是!資料會被截斷因為位元組數還是超過了資料庫的欄位大小限制
程式碼範例
Output
上述解法只有先讓程式碼端和資料庫端的儲存大小判斷先一致,並沒有解決PM要的250字的限制。我覺得要解決這個問題,要先定義250字到底是什麼?是250個字母?還是250個單詞?目前大家的認知水平應該是單詞數量,如果250字是指250個單詞數量的話,那在程式碼端就不能使用string.Length > 250判斷了。在資料庫端開nvarchar(500)好像也稍嫌不足。
如果之後要再回頭改的話,我的作法可能會先請PM提供各種會塞入的越南文資料,取要塞入最大位元組數目作為欄位的大小,再去修改資料庫欄位大小和程式碼端的判斷。
文章同步發布於個人部落格